Currently, much of the utility of computer systems lies in their ability to communicate and share information with other computer systems. Information is typically passed between computer systems via computer networks. Computer networks are groups of computers interconnected by wires or wireless mechanisms such as infrared, radio, and other technologies. The Internet is a global network of many smaller computer networks connected to one another. There is no controlling central network, but rather several high level networks that are connected through network access points. A network access point is a computer hardware or software device (commonly a network router) that serves as a kind of translator between two different networks.
In the early days of computing, there were many different types of computers running many different types of operating systems and software. Early computer network developers realized the necessity for providing a predefined way for these various computers to talk to and understand one another. From this realization came the development of network protocols. Network protocols define the format and the order of messages exchanged between two or more computers, as well as the actions taken by each on the transmission or receipt of a message or other event, in order for two or more networked computers to communicate.
The process of internetworking various computers can be complicated. In order for data to pass from one computer to another, the various network components need to be able to understand numerous applications and protocols along with an assortment of differing end systems and connection types. In order to reduce the design complexity, network developers have organized network protocols, along with the hardware and software that implement the protocols, into network layers. Each protocol belongs to one of these layers. Each layer performs a small, well-defined set of duties. A protocol suite, alternatively called a protocol stack, is a set of these layers usually found on machines connected to the Internet. Common examples include the Open System Interconnection (OSI) seven-layer protocol stack and the Transmission Control Protocol/Internet Protocol (TCP/IP) stack, which consists of four or five layers depending upon implementation.
A protocol stack is organized in such a way that the highest level of abstraction is at the top layer. For example, the top layer may process Hypertext Markup Language (HTML) web pages or Extensible Markup Language (XML) at a client computer, while the bottom layer deals with transmission electronic signals at a binary level. Each layer in the stack builds upon the services provided by the layer below it. The services of a layer refers to the set of the functions that the particular layer offers to the layer immediately above it. The term service differs from the term protocol in that a protocol defines the exchange that takes place between similar layers of two hosts, whereas services are provided from a lower layer in the stack to a layer above it.
When data is sent over a network it is sent in the form of a data packet. Each layer of the protocol stack appends a header containing layer-specific information to the data packet. The process of appending data with headers is called encapsulation. When a data packet is sent, it is encapsulated by the various layers of the protocol stack. When the encapsulated data packet is received at its destination, it goes through the process of decapsulation. During decapsulation the layers of the receiving stack extract layer-specific information and process the encapsulated data accordingly.
Systems connected to the Internet use the TCP/IP protocol stack. At the bottom of the protocol stack is the physical layer. The physical layer typically deals with communicating binary data by manipulating electrical voltages. Just above the physical layer is the data link layer. The data link layer provides low level services such as error detection, framing, error correction, flow control, and the like. Together these two layers are responsible for moving raw data across a physical (or wireless) medium from one device to an immediately adjacent device.
Above the physical layer and data link layer is the network layer. In the TCP/IP protocol stack, the Internet Protocol (IP) resides at the network layer. IP is often described as the common thread that holds the Internet together. The network layer may also have routing protocols that determine the routes that data packets take between source and destination. In sum, the network layer is responsible for moving data from one host to another.
Sitting on top of the network layer is the transport layer. The transport layer extends the network layer's delivery service between two hosts by providing connection between two programs (or processes) running on the hosts. In the TCP/IP protocol stack, there are two transport layer protocols that provide service to the application layer protocols: TCP and User Datagram Protocol (UDP). TCP is a connection-oriented service, meaning that a connection is made between the source and destination in order to ensure the reliable transmission of data. UDP is a connectionless service, which does not take any measure to ensure delivery of data, but rather makes a “best effort” to see that it is delivered. The transport layer receives messages or data packets from the application layer. The application layer, which sits above the transport layer, is responsible for supporting network applications. Many different protocols are included in the application layer. For example, the application layer may include Hypertext Transfer Protocol (HTTP) to support web traffic, Simple Mail Transfer Protocol (SMTP) for e-mail, and File Transfer Protocol (FTP) for file transfer. The application layer is the layer that is most visible to the end user of a system.
Viewing the five layers of the TCP/IP stack as a whole, the sharing of data between hosts over the network is briefly summarized as follows: The application layer creates and handles the actual data that a sender wishes to send to a receiver. The transport layer establishes a connection between sender and receiver and ensures that once the data sent over the application layer reaches the receiver, it is given to the correct process or application running on the receiver. The network layer makes the decision of how the data is going to travel across the network to get from the sender to the receiver. More specifically, the network layer makes the actual routing decisions. The physical layer and data link layer manage the way that the physical bits, bytes and voltages move across the media on the route chosen by the network layer.
In known messaging systems, routing decisions are generally made at the network layer. A message is sent by the application layer, which is encapsulated by the transport layer and handed off to the network layer. A software or hardware component in the network layer receives the encapsulated data from the transport layer, and sends it on to the receiver. Each message traverses the network through a series of “hops” from network router to network router. Typically, routers found along the route make what is called a “next hop” decision. That is, they only choose the next router to forward the message to, leaving that next router to make the next routing decision. Network engineers have attempted to overcome this limitation by implementing a technology known as source routing. Source routing is a routing technique that causes some or all intermediate routing points to be represented directly in the data packet to be forwarded. This is in contrast to the typical situation in which intermediate routers rely on acquired routing state information to forward incoming packets. Although source routing has been used to specify a route to take in delivering a message, source routing determines the path at the network level. Using source routing, it is not possible for an application to specify a route that includes intermediate stops between the sender and the ultimate destination, for example, to take advantage of value-added services at a specified intermediate location. Source routing, moreover, carries significant security risks in many contexts, and is not generally used for routing common network traffic. Thus, it would be an advancement in the art to provide a system that allows applications to choose their own message paths without using source routing. It would be a further advancement in the art to allow a network application to make intelligent decisions about routing by defining its own message path, and also to provide a mechanism for a dynamic message path that can change over the course of the transmission of a message.
In the context of application protocols, it may be desirable to utilize distributed services. Distributed services are those services that are distributed across the network on multiple servers to accommodate large numbers of users. Often times, utilizing distributed services creates a need for an application to be able to determine how to send a message between services. It would be an advancement in the art to provide an improved method for an application to determine how to send a message between distributed services.
Known messaging systems also lack the ability to allow a sender to specify, along the path from ultimate sender to ultimate receiver, one or more intermediaries at which the message may be further processed. As a message is transported through a network in a series of router hops, routers typically ignore the encapsulated application layer data, focusing only on the IP addressing information (stored in the network layer header) necessary to process the message and send it to its next hop. It would thus be an advancement in the art for an intermediary host to be able to not only process the network information in the IP header, but also see and process the entire message, perhaps adding services, additional routing instructions, or even additional data to the message, before sending it to the next hop. It would be a further advancement in the art to be able to dynamically define a return message path based on the network route traveled by a network message.